﻿Imports lbGlobalcom
Imports Oracle.DataAccess.Client
Public Class fComprasNew
    'prueba
    Dim daMovimi As lbGlobalcom.dsMovimientoTableAdapters.MOV_MOVIMIENTOTableAdapter
    Dim daMovimiDetalle As lbGlobalcom.dsMovimientoTableAdapters.MOV_MOVIMIENTODETALLETableAdapter
    Dim daMovimiDetDescri As lbGlobalcom.dsMovimientoTableAdapters.MOV_DESCRIPCIONDETTableAdapter
    Dim daTipoDoc As lbGlobalcom.dsGlobalTableAdapters.GLO_TIPODOCUMENTOTableAdapter
    Dim daTerce As lbGlobalcom.dsTerceroTableAdapters.TER_TERCEROTableAdapter
    Dim daProv As lbGlobalcom.dsTerceroTableAdapters.TER_PROVEEDORESTableAdapter
    Dim daCli As lbGlobalcom.dsTerceroTableAdapters.TER_CLIENTESTableAdapter
    Dim daVen As lbGlobalcom.dsTerceroTableAdapters.TER_VENDEDORTableAdapter
    Dim daTipoSubProd As lbGlobalcom.dsGlobalTableAdapters.GLO_DATOSTABLASTableAdapter
    Dim daTipoPPack As lbGlobalcom.dsInventariosTableAdapters.INV_TIPOSPREPACKSTableAdapter
    Dim daInve As lbGlobalcom.dsInventariosTableAdapters.INV_DETALLETableAdapter
    Dim daPrepack As lbGlobalcom.dsInventariosTableAdapters.INV_PREPACKTableAdapter
    Dim drProv As lbGlobalcom.dsTercero.TER_PROVEEDORESRow
    Dim drCli As lbGlobalcom.dsTercero.TER_CLIENTESRow
    Dim drVen As lbGlobalcom.dsTercero.TER_VENDEDORRow
    Dim cListaP As lbGlobalcom.cEncaListaPrecios
    Dim cDetLis As lbGlobalcom.cDetalleListaPrecios
    Dim cCom As lbGlobalcom.cCompra
    Dim iTipoDoc As cTipoDocumento
    Dim iBodOri As cBodegas
    Dim iBodDes As cBodegas
    Dim iFP As cFormasPago
    Dim iTer As cTercero
    Private lEliminaDoc As Boolean = False
    Private mensajeValidacion As String = ""

    Private Sub fComprasNew_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Try
            If DsMovimiento.MOV_DESCRIPCIONDET.GetChanges IsNot Nothing Or DsMovimiento.MOV_MOVIMIENTODETALLE.GetChanges IsNot Nothing Or DsMovimiento.MOV_MOVIMIENTO.GetChanges IsNot Nothing Then
                If MessageBox.Show("Hay cambios pendientes por salvar, desae salvarlos", "Cambios Pendientes", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                    SalvaCambios(False)
                End If
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub fMovimiento_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Try
            daMovimi = New lbGlobalcom.dsMovimientoTableAdapters.MOV_MOVIMIENTOTableAdapter
            daMovimiDetalle = New lbGlobalcom.dsMovimientoTableAdapters.MOV_MOVIMIENTODETALLETableAdapter
            daMovimiDetDescri = New lbGlobalcom.dsMovimientoTableAdapters.MOV_DESCRIPCIONDETTableAdapter
            daTipoDoc = New lbGlobalcom.dsGlobalTableAdapters.GLO_TIPODOCUMENTOTableAdapter
            daTerce = New lbGlobalcom.dsTerceroTableAdapters.TER_TERCEROTableAdapter
            daTipoPPack = New lbGlobalcom.dsInventariosTableAdapters.INV_TIPOSPREPACKSTableAdapter
            daTipoPPack.Fill(DsInventarios.INV_TIPOSPREPACKS)
            daTipoSubProd = New lbGlobalcom.dsGlobalTableAdapters.GLO_DATOSTABLASTableAdapter
            daTipoSubProd.FillByIdGrupo(DsGlobalTipoSubProd.GLO_DATOSTABLAS, "sp")
            daInve = New lbGlobalcom.dsInventariosTableAdapters.INV_DETALLETableAdapter
            daPrepack = New lbGlobalcom.dsInventariosTableAdapters.INV_PREPACKTableAdapter
            lbGlobalcom.cGeneral.ActivaControles(Me.Controls, False)
            FECHADOCUMENTODateTimePicker.MaxDate = CustomPrincipal.Periodo.HASTAF
            FECHADOCUMENTODateTimePicker.MinDate = CustomPrincipal.Periodo.DESDEF
            If CustomPrincipal.Periodo.DESDEF <= Date.Today And CustomPrincipal.Periodo.HASTAF >= Date.Today Then
                DsMovimiento.MOV_MOVIMIENTO.Columns("FECHADOCUMENTO").DefaultValue = Date.Today
            Else
                DsMovimiento.MOV_MOVIMIENTO.Columns("FECHADOCUMENTO").DefaultValue = CustomPrincipal.Periodo.HASTAF
            End If
            DsMovimiento.MOV_MOVIMIENTO.Columns("FECHAVENCIMIENTO").DefaultValue = Date.Today
            cGeneral.BloquearOrdenDatagrid(MOV_DESCRIPCIONDETDataGridView)
            cGeneral.BloquearOrdenDatagrid(MOV_MOVIMIENTODETALLEDataGridView)
            cActivaSeguridad.AseguraGridMovimi(MOV_MOVIMIENTODETALLEDataGridView)
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub btnBuscaBodDes_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscaBodDes.Click
        Try
            Dim fBusBod As New fListaBodegas
            fBusBod.idSede = IDSEDETextBox.Text
            If fBusBod.ShowDialog = Windows.Forms.DialogResult.OK Then
                IDBODEGADESTINOTextBox.Text = fBusBod.Bodega
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub btnBuscaCCosto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscaCCosto.Click
        Try
            Dim fCC As New fListaCCostos
            If fCC.ShowDialog = Windows.Forms.DialogResult.OK Then
                IDCCOSTOTextBox.Text = fCC.CCosto
            End If

        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub btnBuscaLista_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscaLista.Click
        Try
            Dim fLP As New fListaPrecios
            If fLP.ShowDialog = Windows.Forms.DialogResult.OK Then
                IDLISTATextBox.Text = fLP.Lista
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub CargaTipoDoc(ByVal TipoDoc As String)
        Try
            iTipoDoc = New cTipoDocumento(TipoDoc)
            If iTipoDoc Is Nothing Then
                MessageBox.Show("El tipo de documento seleccionado no esta registrado", "Error en tipo de documento", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            Else
                NUMEROTextBox.Text = lbGlobalcom.Consec.GetNumeroActual(TipoDoc, iTipoDoc.DocEs)
                IDBODEGADESTINOTextBox.Text = iTipoDoc.BodegaPara
                IDCCOSTOTextBox.Text = iTipoDoc.idCcosto
                IDSEDETextBox.Text = iTipoDoc.idSede
                'If CustomPrincipal.RestringidoASede Then
                'IDSEDETextBox.Enabled = False
                'btnBuscasede.Enabled = False
                'End If
                IDLISTATextBox.Text = iTipoDoc.idLista
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub btmBuscaDoc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btmBuscaDoc.Click
        Try
            Dim fLDoc As New fListaTipoDocs
            fLDoc.DocEs = "Compras"
            fLDoc.SubClase = "COM"
            If fLDoc.ShowDialog = Windows.Forms.DialogResult.OK Then
                IDDOCUMENTOTextBox.Text = fLDoc.idTipoDoc
                CargaTipoDoc(fLDoc.idTipoDoc)
                'SalvaCambios(False)
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub ActualizaFormaPago(ByVal FP As String)
        iFP = New cFormasPago(FP)
        Try
            FECHAVENCIMIENTODateTimePicker.Value = iFP.GetFechaVence(FECHADOCUMENTODateTimePicker.Value)
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub ActualizaDatosTercero(ByVal ActualizaFP As Boolean)
        Try
            iTer = New cTercero(IDTERCEROTextBox.Text, "Pro")
            txtNombreTercero.Text = iTer.NombreCompleto
            TXTDIRECCION.Text = iTer.Direccion
            TXTCIUDAD.Text = iTer.iMunicipios.Municipio
            If ActualizaFP Then _
                txtFP.Text = iTer.iProveedor.idFormaPago
            ActualizaFormaPago(txtFP.Text)
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub btnBuscaTerce_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscaTerce.Click
        Try
            Dim fBT As New fBuscaTercero
            fBT.TipoTercero = "Proveedor"
            daProv = New lbGlobalcom.dsTerceroTableAdapters.TER_PROVEEDORESTableAdapter

            If fBT.ShowDialog = Windows.Forms.DialogResult.OK Then
                IDTERCEROTextBox.Text = fBT.midTercero
                ActualizaDatosTercero(True)
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub btnBuscasede_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscasede.Click
        Try
            Dim fLS As New fListaSedes
            If fLS.ShowDialog = Windows.Forms.DialogResult.OK Then
                IDSEDETextBox.Text = fLS.Sede
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub IniCompra()
        Try
            IDDOCUMENTOTextBox.Enabled = True
            NUMEROTextBox.Enabled = True
            lbGlobalcom.cGeneral.ActivaControles(Me.Controls, True)
            lbGlobalcom.cGeneral.bloquearDocumento(Me.Controls, True)
            If DsMovimiento.MOV_MOVIMIENTO.GetChanges IsNot Nothing Or DsMovimiento.MOV_MOVIMIENTODETALLE.GetChanges IsNot Nothing Or DsMovimiento.MOV_DESCRIPCIONDET.GetChanges IsNot Nothing Then
                If MessageBox.Show("Hay cambios pendientes por salvar, desea salvarlos", "Cambios pendientes", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                    SalvaCambios(True)
                End If
            End If
            MOV_MOVIMIENTOBindingSource.CancelEdit()
            DsMovimiento.MOV_DESCRIPCIONDET.Rows.Clear()
            DsMovimiento.MOV_MOVIMIENTODETALLE.Rows.Clear()
            DsMovimiento.MOV_MOVIMIENTO.Rows.Clear()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub BindingNavigatorAddNewItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorAddNewItem.Click
        Try
            IniCompra()
            MOV_MOVIMIENTOBindingSource.AddNew()
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub MOV_MOVIMIENTODETALLEDataGridView_CellBeginEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles MOV_MOVIMIENTODETALLEDataGridView.CellBeginEdit
        Try
            MOV_MOVIMIENTODETALLEDataGridView.Rows(e.RowIndex).Cells("LINEA").Value = cGeneral.GetNumeroLinea(MOV_MOVIMIENTODETALLEDataGridView, e.RowIndex)
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Henry")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub ActualizaDatosProd(ByVal Fila As Integer)
        Try
            If MOV_MOVIMIENTODETALLEDataGridView.CurrentRow IsNot Nothing Then
                MOV_MOVIMIENTODETALLEDataGridView.Rows(Fila).Cells(8).Value = cDetLis.PrecioCosto
                MOV_MOVIMIENTODETALLEDataGridView.Rows(Fila).Cells(9).Value = cDetLis.PrecioCosto * cDetLis.iProducto.iTipoIva.PorIva
            Else
                stMovimi.Text = ""
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub CalculaVrLinea()
        Dim PBaseConDto As Double = MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Cells("VALORBASE").Value * (1 - MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Cells("DESCUENTO1").Value) * (1 - MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Cells("DESCUENTO2").Value)
        cDetLis = New cDetalleListaPrecios(IDLISTATextBox.Text, MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Cells("IDPRODUCTO").Value)
        Dim IvaConDto As Double = PBaseConDto * cDetLis.iProducto.iTipoIva.PorIva
        MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Cells("VALORIVA").Value = IvaConDto
    End Sub
    Private Sub MOV_MOVIMIENTODETALLEDataGridView_CellValidated(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles MOV_MOVIMIENTODETALLEDataGridView.CellValidated
        Try
            If MOV_MOVIMIENTODETALLEDataGridView.IsCurrentCellInEditMode Then
                Select Case MOV_MOVIMIENTODETALLEDataGridView.Columns(e.ColumnIndex).Name
                    Case "IDPRODUCTO"
                        ActualizaDatosProd(e.RowIndex)
                    Case "CANTIDAD"
                        MOV_MOVIMIENTODETALLEBindingSource.EndEdit()
                        SalvaCambios(False)
                    Case "DESCUENTO1"
                        MOV_MOVIMIENTODETALLEBindingSource.EndEdit()
                        SalvaCambios(False)
                    Case "DESCUENTO2"
                        MOV_MOVIMIENTODETALLEBindingSource.EndEdit()
                        SalvaCambios(False)
                    Case "VALORBASE"
                        MOV_MOVIMIENTODETALLEBindingSource.EndEdit()
                        CalculaVrLinea()
                        SalvaCambios(False)
                End Select
            End If

        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try

    End Sub
    Private Sub MOV_MOVIMIENTODETALLEDataGridView_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles MOV_MOVIMIENTODETALLEDataGridView.CellValidating
        Try
            If MOV_MOVIMIENTODETALLEDataGridView.IsCurrentCellInEditMode AndAlso e.FormattedValue IsNot Nothing AndAlso e.FormattedValue <> "" Then
                Select Case e.ColumnIndex
                    Case 3
                        cDetLis = cListaP.DetalleLista(e.FormattedValue)
                        stMovimi.Text = "PRODUCTO: " & cDetLis.iProducto.Descripcion & " UNIDAD: " & cDetLis.iProducto.Unidad & " CONTENIDO: " & cDetLis.iProducto.Contenido
                    Case 5
                        If e.FormattedValue < MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Cells("CANTIDAD").Value AndAlso cDetLis.iProducto.CantidadSubProd > 0 AndAlso MOV_DESCRIPCIONDETDataGridView.RowCount > e.FormattedValue * cDetLis.iProducto.CantidadSubProd Then
                            MessageBox.Show("Para disminuir la cantidad comprada, debe eliminar la cantidad de IMEI o ICCID de acuerdo a la nueva cantidad", "Cantidad IMEI o ICCID", MessageBoxButtons.OK, MessageBoxIcon.Stop)
                            e.Cancel = True
                        End If
                End Select
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            stMovimi.Text = ""
            e.Cancel = True
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub MOV_MOVIMIENTODETALLEDataGridView_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles MOV_MOVIMIENTODETALLEDataGridView.GotFocus
        Dim cVal As New cValidaciones(DsMovimiento)
        Try
            If IDDOCUMENTOTextBox.Text.Length > 0 And NUMEROTextBox.Text.Length > 0 Then
                MOV_MOVIMIENTOBindingSource.EndEdit()
                mensajeValidacion = cVal.ValidaMovimiento(iTipoDoc.DocEs)
                If mensajeValidacion <> "" Then
                    IDSEDETextBox.Focus()
                    MessageBox.Show(mensajeValidacion, "validaciones", MessageBoxButtons.OK)
                Else
                    If DsMovimiento.MOV_MOVIMIENTO.Rows(MOV_MOVIMIENTOBindingSource.Position).RowState = DataRowState.Added Then
                        NUMEROTextBox.Text = lbGlobalcom.Consec.GetNumeroActual(IDDOCUMENTOTextBox.Text, iTipoDoc.DocEs)
                        SalvaCambios(False)
                    End If
                End If
            Else
                IDSEDETextBox.Focus()
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub IDLISTATextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles IDLISTATextBox.TextChanged
        Try
            If IDLISTATextBox.Text.Trim.Length > 0 Then _
                cListaP = New cEncaListaPrecios(IDLISTATextBox.Text)
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub MOV_MOVIMIENTODETALLEDataGridView_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MOV_MOVIMIENTODETALLEDataGridView.KeyDown
        Try
            If e.Control Then
                Select Case e.KeyCode
                    Case Keys.B
                        If MOV_MOVIMIENTODETALLEDataGridView.CurrentCellAddress.X = 3 Then
                            MOV_MOVIMIENTODETALLEDataGridView.Rows(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index).Cells("LINEA").Value = cGeneral.GetNumeroLinea(MOV_MOVIMIENTODETALLEDataGridView, MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index)
                            Dim fLProd As New fListaProductos
                            fLProd.ListaPrecios = IDLISTATextBox.Text
                            If fLProd.ShowDialog = Windows.Forms.DialogResult.OK Then
                                MOV_MOVIMIENTODETALLEDataGridView.Rows(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index).Cells(3).Value = fLProd.idArticulo
                                cDetLis = cListaP.DetalleLista(fLProd.idArticulo)
                                ActualizaDatosProd(MOV_MOVIMIENTODETALLEDataGridView.CurrentCellAddress.Y)
                                stMovimi.Text = "PRODUCTO: " & cDetLis.iProducto.Descripcion & " UNIDAD: " & cDetLis.iProducto.Unidad & " CONTENIDO: " & cDetLis.iProducto.Contenido
                            End If
                        End If
                End Select
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub MOV_MOVIMIENTODETALLEDataGridView_RowEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles MOV_MOVIMIENTODETALLEDataGridView.RowEnter
        Try
            If e.RowIndex >= 0 AndAlso MOV_MOVIMIENTODETALLEDataGridView.Rows(e.RowIndex).Cells(3).Value IsNot Nothing AndAlso MOV_MOVIMIENTODETALLEDataGridView.Rows(e.RowIndex).Cells(1).Value IsNot DBNull.Value Then
                cDetLis = cListaP.DetalleLista(MOV_MOVIMIENTODETALLEDataGridView.Rows(e.RowIndex).Cells(3).Value)
                stMovimi.Text = "PRODUCTO: " & cDetLis.iProducto.Descripcion & " UNIDAD: " & cDetLis.iProducto.Unidad & " CONTENIDO: " & cDetLis.iProducto.Contenido
                TotalizaDoc()
                txtContenido.Text = cDetLis.iProducto.CantidadSubProd
                txtCantidad.Text = cDetLis.iProducto.CantidadSubProd * MOV_MOVIMIENTODETALLEDataGridView.Rows(e.RowIndex).Cells(5).Value
                InicializaConsec()
                ValidarRegsitroDescDetalle(e.RowIndex, MOV_MOVIMIENTODETALLEDataGridView.Rows(e.RowIndex).Cells(5).Value)
                If cDetLis.iProducto.ICCIDEnCompras = "S" And MOV_DESCRIPCIONDETDataGridView.RowCount > 0 Then
                    'getDatosPrepack(e.RowIndex)
                    gbAdminPrepack.Enabled = True
                    gbDatosPrepack.Enabled = True
                Else
                    gbAdminPrepack.Enabled = False
                    gbDatosPrepack.Enabled = False
                End If
            Else
                stMovimi.Text = ""
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub SalvaCambios(ByVal Msj As Boolean)
        Dim Conn As Oracle.DataAccess.Client.OracleConnection
        Dim tran As Oracle.DataAccess.Client.OracleTransaction
        Try
            Conn = New Oracle.DataAccess.Client.OracleConnection(My.Settings.ConnectionString)
            Conn.Open()
            tran = Conn.BeginTransaction

            IDDOCUMENTOTextBox.Enabled = False
            NUMEROTextBox.Enabled = False
            btmBuscaDoc.Enabled = False
            Validate()
            MOV_MOVIMIENTOBindingSource.EndEdit()
            MOV_MOVIMIENTODETALLEBindingSource.EndEdit()
            MOV_DESCRIPCIONDETBindingSource.EndEdit()

            Dim AfecInv As New cAfectaIventarios(DsMovimiento, iTipoDoc, CustomPrincipal.Periodo, False, "N", Conn)
            AfecInv.AfectaInventarios()
            AfecInv = Nothing
            Dim SalvaMov As cSalvaMovimiento
            If lEliminaDoc Then
                SalvaMov = New cSalvaMovimiento(Conn, DsMovimiento.MOV_MOVIMIENTO.GetChanges, DsMovimiento.MOV_MOVIMIENTODETALLE.GetChanges, DsMovimiento.MOV_DESCRIPCIONDET.GetChanges, 0)
            Else
                SalvaMov = New cSalvaMovimiento(Conn, DsMovimiento.MOV_MOVIMIENTO.GetChanges, DsMovimiento.MOV_MOVIMIENTODETALLE.GetChanges, DsMovimiento.MOV_DESCRIPCIONDET.GetChanges, 1)
            End If
            DsMovimiento.AcceptChanges()
            SalvaMov = Nothing
            tran.Commit()
            If iTipoDoc.TipoDocGenera IsNot DBNull.Value AndAlso iTipoDoc.TipoDocGenera.Trim.Length > 0 Then
                Dim DocGen As cGeneraDocumentoAutomatico = New cGeneraDocumentoAutomatico(iTipoDoc.TipoDocGenera, DsMovimiento)
                DocGen = Nothing
            End If
            If iTipoDoc.idMacro.Trim.Length > 0 Then
                Dim ProMacro As cProcesaMacro = New cProcesaMacro(iTipoDoc.idMacro, DsMovimiento)
                ProMacro = Nothing
            End If
            Conn.Close()
            If Msj Then _
                MessageBox.Show("Se salvarón cambios con exito", "Salvar Cambios", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Catch ex As Exception
            tran.Rollback()
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub MOV_MOVIMIENTOBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MOV_MOVIMIENTOBindingNavigatorSaveItem.Click
        Try
            Dim cVal As New cValidaciones(DsMovimiento)
            MOV_MOVIMIENTOBindingSource.EndEdit()
            mensajeValidacion = cVal.ValidaMovimiento(iTipoDoc.DocEs)
            If mensajeValidacion = "" Then
                SalvaCambios(True)
            Else
                MessageBox.Show(mensajeValidacion, "validaciones", MessageBoxButtons.OK)
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub btnBuscaOrdenCompra_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscaOrdenCompra.Click
        lbGlobalcom.cGeneral.ActivaControles(Me.Controls, True)
        IniCompra()
        cCom = New lbGlobalcom.cCompra(Me.DsMovimiento)
        Try
            Dim fOrdCom As New fListaOrdenCompra
            If fOrdCom.ShowDialog = Windows.Forms.DialogResult.OK Then
                cCom.cargarCompra(fOrdCom.Ptipodoc, fOrdCom.Pnumero)
                ActualizaDatosTercero(False)
                TotalizaDoc()
                SalvaCambios(False)
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub btnBuscaCompra_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscaCompra.Click
        Try
            Dim cmov As New cMovimiento(DsMovimiento)
            Dim fListaMov As New fListaMovimi
            fListaMov.TipoMovimi = "Compras"
            fListaMov.SubClase = "COM"
            If fListaMov.ShowDialog = Windows.Forms.DialogResult.OK Then
                If DsMovimiento.MOV_DESCRIPCIONDET.GetChanges IsNot Nothing Or DsMovimiento.MOV_MOVIMIENTODETALLE.GetChanges IsNot Nothing Or DsMovimiento.MOV_MOVIMIENTO.GetChanges IsNot Nothing Then
                    If MessageBox.Show("Hay cambios pendientes por salvar, desae salvarlos", "Cambios Pendientes", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                        SalvaCambios(False)
                    End If
                End If
                DsMovimiento.MOV_DESCRIPCIONDET.Rows.Clear()
                DsMovimiento.MOV_MOVIMIENTODETALLE.Rows.Clear()
                DsMovimiento.MOV_MOVIMIENTO.Rows.Clear()
                daMovimi.FillByIdDocumentoNumero(DsMovimiento.MOV_MOVIMIENTO, fListaMov.mTipoDoc, fListaMov.mNumeroDoc)
                daMovimiDetalle.FillByIdDocumentoNumero(DsMovimiento.MOV_MOVIMIENTODETALLE, fListaMov.mTipoDoc, fListaMov.mNumeroDoc)
                daMovimiDetDescri.FillByIdDocumentoNumero(DsMovimiento.MOV_DESCRIPCIONDET, fListaMov.mTipoDoc, fListaMov.mNumeroDoc)
                If CustomPrincipal.IsInRole("ADMINGC") = False And cmov.buscarCerrado(IDDOCUMENTOTextBox.Text, NUMEROTextBox.Text) = "S" Then
                    lbGlobalcom.cGeneral.bloquearDocumento(Me.Controls, False)
                Else
                    lbGlobalcom.cGeneral.ActivaControles(Me.Controls, True)
                End If
                ActualizaDatosTercero(False)
                IDDOCUMENTOTextBox.Enabled = False
                NUMEROTextBox.Enabled = False
                btmBuscaDoc.Enabled = False
                InicializaConsec()
                If MOV_MOVIMIENTODETALLEDataGridView.CurrentRow IsNot Nothing Then _
                    ValidarRegsitroDescDetalle(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index, MOV_MOVIMIENTODETALLEDataGridView.Rows(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index).Cells("CANTIDAD").Value)
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub BindingNavigatorDeleteItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorDeleteItem.Click
        Try
            If MessageBox.Show("Esta seguro que desea eliminar este documento", "Elimina Documento", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                If cGeneral.cantidadPrepackFacturados(DsMovimiento.MOV_MOVIMIENTO.Rows(0)) = 0 Then
                    cGeneral.EliminaPrepackInv(DsMovimiento.MOV_MOVIMIENTO.Rows(0))
                    MOV_MOVIMIENTOBindingSource.RemoveCurrent()
                    lEliminaDoc = True
                    SalvaCambios(False)
                    MessageBox.Show("Se elimino documento con exito", "Elimino Documento", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    lbGlobalcom.cGeneral.ActivaControles(Me.Controls, False)
                Else
                    MessageBox.Show("No se puede eliminar el documento,Debe eliminar primero las facturas asociadas a las prepack", "Elimino Documento", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End If
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub IDBODEGADESTINOTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles IDBODEGADESTINOTextBox.TextChanged
        Try
            If IDBODEGADESTINOTextBox.Text.Trim.Length > 0 Then _
                iBodDes = New cBodegas(IDBODEGADESTINOTextBox.Text)
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub IDDOCUMENTOTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles IDDOCUMENTOTextBox.TextChanged
        Try
            If IDDOCUMENTOTextBox.Text.Trim.Length > 0 Then _
                iTipoDoc = New cTipoDocumento(IDDOCUMENTOTextBox.Text)
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub BtnBuscaFP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscaFP.Click
        Try
            Dim fLisFP As New fListaFormasPago
            If fLisFP.ShowDialog = Windows.Forms.DialogResult.OK Then
                txtFP.Text = fLisFP.FP
                ActualizaFormaPago(fLisFP.FP)
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub txtfp_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtFP.TextChanged
        Try
            If txtFP.Text.Trim.Length > 0 Then
                iFP = New cFormasPago(txtFP.Text)
                FECHAVENCIMIENTODateTimePicker.Value = iFP.GetFechaVence(FECHADOCUMENTODateTimePicker.Value)
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub TotalizaDoc()
        Try
            'Dim TotalBase As Double = 0
            'Dim TotalIva As Double = 0
            'Dim Totaldoc As Double = 0
            'For Each drDetMov As dsMovimiento.MOV_MOVIMIENTODETALLERow In DsMovimiento.MOV_MOVIMIENTODETALLE.Rows
            '    If drDetMov.RowState <> DataRowState.Deleted Then
            '        'TotalBase += drDetMov.VALORBASE * drDetMov.CANTIDAD
            '        'TotalIva += drDetMov.VALORIVA * drDetMov.CANTIDAD
            '        Totaldoc += drDetMov.VALORLINEA
            '    End If
            'Next
            Me.TXTTOTALDOC.Text = (CDbl(TXTTOTALBASE.Text) + CDbl(TXTTOTALIVA.Text)).ToString("C2")
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

    End Sub

    Private Sub MOV_DESCRIPCIONDETALLEDataGridView_DataError(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles MOV_DESCRIPCIONDETDataGridView.DataError
        e.Cancel = True
        lbGlobalcom.cError.SalvaError(e.Exception, "Samuel")
        MessageBox.Show(e.Exception.Message)
    End Sub

    Private Sub MOV_DESCRIPCIONDETALLEDataGridView_CellBeginEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles MOV_DESCRIPCIONDETDataGridView.CellBeginEdit
        Try
            If e.RowIndex + 1 > MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Cells("CANTIDAD").Value * cDetLis.iProducto.CantidadSubProd Then
                e.Cancel = True
                MessageBox.Show("Supero el tope de registro de IMEI e ICCID para esta linea", "Supero el Tope", MessageBoxButtons.OK, MessageBoxIcon.Information)
                MOV_DESCRIPCIONDETDataGridView.CancelEdit()
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try

    End Sub

    Private Sub btnSelPadre_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelPadre.Click
        Try
            Dim fLAP As New fListaParaArmarPrepacks
            fLAP.Datos = DsMovimiento.MOV_MOVIMIENTODETALLE
            If fLAP.ShowDialog = Windows.Forms.DialogResult.OK Then
                Dim cProd As cProducto = New cProducto(fLAP.CodigoProd)
                Dim cTipoPPack As TipoPrepack = New TipoPrepack(cbTipoPrepacks.SelectedValue)
                If cProd.CantidadSubProd <> cTipoPPack.CantidadIMEI Then
                    MessageBox.Show("El codigo del padre no es compatible con el prepack seleccionado", "Incompatibilidad", MessageBoxButtons.OK, MessageBoxIcon.Stop)
                    Exit Sub
                End If
                If cProd.EsPadre = "S" Then
                    txtCodigoPadre.Text = fLAP.CodigoProd
                    txtItemP.Text = fLAP.ItemProd
                Else
                    MessageBox.Show("Producto no esta calificado para ser padre, favor verifique e inetnete de nuevo", "No Padre", MessageBoxButtons.OK, MessageBoxIcon.Hand)
                End If
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub btnSelHijo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelHijo.Click
        Try
            Dim fLAP As New fListaParaArmarPrepacks
            fLAP.Datos = DsMovimiento.MOV_MOVIMIENTODETALLE
            If fLAP.ShowDialog = Windows.Forms.DialogResult.OK Then
                Dim cProd As cProducto = New cProducto(fLAP.CodigoProd)
                If cProd.EsPadre = "N" Then
                    txtCodigoHijo.Text = fLAP.CodigoProd
                    txtItemH.Text = fLAP.ItemProd
                Else
                    MessageBox.Show("Producto esta calificado para ser padre, y esta tratando de asociarlo como hijo, favor verifique e inetnete de nuevo", "Es Padre", MessageBoxButtons.OK, MessageBoxIcon.Hand)
                End If
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Function GetRegistrosAsociados(ByVal IdProducto As String, ByVal ItemProd As Integer) As dsMovimiento.MOV_DESCRIPCIONDETRow()
        Try
            Return DsMovimiento.MOV_MOVIMIENTODETALLE.Rows.Find(New Object() {IDDOCUMENTOTextBox.Text, NUMEROTextBox.Text, ItemProd}).GetChildRows("FK_MOV_MOVIMIENTODETALLE_MOV_DESCRIPCIONDET")
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try

    End Function
    Private Sub btnGeneraPrepack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGeneraPrepack.Click
        Try
            If txtCodigoHijo.Text.Trim.Length <> 0 And txtCodigoPadre.Text.Trim.Length <> 0 Then
                Dim gPPackMov As New GeneraPrepakDesdeMovimi(GetRegistrosAsociados(txtCodigoPadre.Text, txtItemP.Text), GetRegistrosAsociados(txtCodigoHijo.Text, txtItemH.Text), cbTipoPrepacks.SelectedValue)
                If Not gPPackMov.NumeroRegIguales Or Not gPPackMov.ParesIguales Then
                    If MessageBox.Show("No coinciden los registros en la cantidad o numero, desea continuar de todas maneras", "No coinciden", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                        gPPackMov.GeneraPrepacKsNoCoincidentes()
                        SalvaCambios(False)
                    End If
                Else
                    gPPackMov.GeneraPrepacksCoincidentes()
                    SalvaCambios(False)
                    MessageBox.Show("Se Generarón " & gPPackMov.NumeroPrepacksArmados.ToString & ", Prepacks con exito")
                End If

            Else
                MessageBox.Show("Debe de ingresar el codigo y la posición del padre y del hijo", "Falta Información", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            End If

        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub btnEliminaPrepack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminaPrepack.Click
        Try
            If txtCodigoHijo.Text.Trim.Length <> 0 And txtCodigoPadre.Text.Trim.Length <> 0 Then
                Dim ePPackMov As New cEliminaPrepaks(GetRegistrosAsociados(txtCodigoPadre.Text, txtItemP.Text))
                MessageBox.Show("Se eliminarón " & ePPackMov.NumeroPreacksEliminados & ", con exito" & vbNewLine & "No se eliminarón " & ePPackMov.NumeroPrepakcsVendidos & ", por que ya fuerón venddidos " & vbNewLine & "Lista: " & ePPackMov.PreapksVendidos, "Elinados", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                MessageBox.Show("Debe de ingresar el codigo y la posición del padre y del hijo", "Falta Información", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub LimpiaDatosPreapck()
        txtConsecPrepack.Text = ""
        txtFechaEnsamblado.Text = ""
        txtEstadoPrepack.Text = ""
        txtCodigoP.Text = ""
        txtTipoP.Text = ""
        txtNumeroRegP.Text = ""
        txtCodigoH.Text = ""
        txtTipoH.Text = ""
        txtNumeroRegH.Text = ""
    End Sub

    Private Sub llenarProductoCombo(ByVal fila As Integer)
        Try
            cbProductos.DisplayMember = "IDPRODUCTO"
            cbProductos.ValueMember = "NUMEROLINEA"
            cbProductos.DataSource = DsMovimiento.MOV_MOVIMIENTODETALLE
            cbProductos.SelectedValue = fila + 1
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Henry")
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub getDatosPrepack(ByVal Fila As Integer)
        Try
            If MOV_DESCRIPCIONDETDataGridView.Rows(Fila) IsNot Nothing AndAlso Not MOV_DESCRIPCIONDETDataGridView.Rows(Fila).IsNewRow Then
                Dim Prod As cProducto = New cProducto(MOV_DESCRIPCIONDETDataGridView.Rows(Fila).Cells("IDPRODUCTO1").Value)
                If Prod.EsPadre = "S" Then
                    Dim TipoSubProd As Integer = MOV_DESCRIPCIONDETDataGridView.Rows(Fila).Cells("TIPOSUBPROD").Value
                    Dim NumeroRegistro As String = MOV_DESCRIPCIONDETDataGridView.Rows(Fila).Cells("NUMEROREGISTRO").Value
                    Dim PPack As cPrepack = New cPrepack(TipoSubProd, NumeroRegistro, True)
                    If PPack.EsPrepack Then
                        txtConsecPrepack.Text = PPack.ConsecPrepack
                        txtFechaEnsamblado.Text = PPack.FechaPrepack.ToString("dd/MM/yyyy")
                        txtEstadoPrepack.Text = PPack.Estado
                        txtCodigoP.Text = PPack.IdProductoP
                        txtTipoP.Text = cGeneral.GetNombreItemDatosTabla(PPack.TipoSubProdP, "sp")
                        txtNumeroRegP.Text = PPack.NumeroRegsitroP
                        txtCodigoH.Text = PPack.IdProductoH
                        txtTipoH.Text = cGeneral.GetNombreItemDatosTabla(PPack.TipoSubProdH, "sp")
                        txtNumeroRegH.Text = PPack.NumeroRegsitroH
                        Dim TipoPPack As TipoPrepack = New TipoPrepack(PPack.IdTipoPrepack)
                        txtTipoPrepack.Text = TipoPPack.Descripcion
                        TipoPPack = Nothing
                        PPack = Nothing
                    Else
                        LimpiaDatosPreapck()
                    End If
                Else
                    LimpiaDatosPreapck()
                End If
                Prod = Nothing
            Else
                LimpiaDatosPreapck()
            End If
        Catch ex As Exception
            If ex.Message.Trim <> "No existe prepack para este tiposubprod y numeroreg, verifique e intente de nuevo" Or ex.Message.Trim <> "No existe prepack para este tiposubprod y numeroreg, verifique e intente de nuevo" Then
                lbGlobalcom.cError.SalvaError(ex, "Samuel")
                MessageBox.Show(ex.Message)
            Else
                LimpiaDatosPreapck()
            End If
        End Try
    End Sub
    Private Sub MOV_DESCRIPCIONDETDataGridView_RowEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles MOV_DESCRIPCIONDETDataGridView.RowEnter
        Try
            If chVerPPack.Checked AndAlso cDetLis.iProducto.ICCIDEnCompras = "S" Then _
                getDatosPrepack(e.RowIndex)
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Henry")
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub InicializaConsec()
        Try
            Dim NFilas As Integer = MOV_DESCRIPCIONDETDataGridView.RowCount
            txtIngresados.Text = NFilas
            If NFilas = 0 Then
                txtConsecutivo.Text = 0
            ElseIf NFilas <= cDetLis.iProducto.CantidadSubProd Then
                txtConsecutivo.Text = NFilas
            Else
                Dim FilaActual As Integer = NFilas - 1
                Dim Salir = False
                Dim NregCosecIguales As Integer = 0
                Dim nConsec As Integer = MOV_DESCRIPCIONDETDataGridView.Rows(FilaActual).Cells("NUMEROPRODUCTO").Value
                While Not Salir
                    If MOV_DESCRIPCIONDETDataGridView.Rows(FilaActual).Cells("NUMEROPRODUCTO").Value <> nConsec Or NregCosecIguales = cDetLis.iProducto.CantidadSubProd Then
                        Salir = True
                    Else
                        FilaActual -= 1
                        NregCosecIguales += 1
                    End If
                End While
                txtConsecutivo.Text = NregCosecIguales
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Henry")
            MessageBox.Show(ex.Message)
        End Try

    End Sub
    Private Function GetConsecActual() As Integer
        Try
            If MOV_DESCRIPCIONDETDataGridView.RowCount = 0 Then
                Return 1
            Else
                Return MOV_DESCRIPCIONDETDataGridView.Rows(MOV_DESCRIPCIONDETDataGridView.RowCount - 1).Cells("NUMEROPRODUCTO").Value
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Henry")
            MessageBox.Show(ex.Message)
        End Try

    End Function
    Private Sub ValidarRegsitroDescDetalle(ByVal Fila As Integer, ByVal Cantidad As Integer)
        Try
            Dim NFilas As Integer = MOV_DESCRIPCIONDETDataGridView.RowCount
            If Not MOV_MOVIMIENTODETALLEDataGridView.Rows(Fila).IsNewRow Then
                If cDetLis.iProducto.CantidadSubProd * Cantidad > NFilas Then
                    txtNumeroRegistro.Enabled = True
                Else
                    txtNumeroRegistro.Enabled = False
                End If
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Henry")
            MessageBox.Show(ex.Message)
        End Try

    End Sub

    Private Function validaImeiIccid(ByVal numeroRegistro As String) As Integer
        Try
            If DsMovimiento.MOV_DESCRIPCIONDET.Select("NUMEROREGISTRO = '" & numeroRegistro & "'").Count > 0 Then
                Return 1
            Else
                Return 0
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Henry")
            MessageBox.Show(ex.Message)
        End Try
    End Function

    Private Sub txtNumeroRegistro_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtNumeroRegistro.Validated
        SalvaCambios(False)
    End Sub

    Private Sub txtNumeroRegistro_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtNumeroRegistro.Validating
        Try
            If txtNumeroRegistro.Text.Trim.Length > 0 Then
                If validaImeiIccid(txtNumeroRegistro.Text) = 0 Then
                    If daInve.GetImeiIccidValido(txtNumeroRegistro.Text) = 0 Then
                        If daPrepack.GetImeiAndIccidValido(MOV_MOVIMIENTODETALLEDataGridView.Rows(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index).Cells("IDPRODUCTO").Value, txtNumeroRegistro.Text) = 0 Then
                            Dim ConsecAsigna As Integer = GetConsecActual()
                            If txtConsecutivo.Text = txtContenido.Text Then
                                ConsecAsigna += 1
                                txtConsecutivo.Text = 1
                            Else
                                txtConsecutivo.Text += 1
                            End If
                            Dim drMovDetalle As lbGlobalcom.dsMovimiento.MOV_MOVIMIENTODETALLERow = DsMovimiento.MOV_MOVIMIENTODETALLE.Rows(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index)
                            Dim drDescDet As lbGlobalcom.dsMovimiento.MOV_DESCRIPCIONDETRow = DsMovimiento.MOV_DESCRIPCIONDET.NewMOV_DESCRIPCIONDETRow
                            drDescDet.SetParentRow(drMovDetalle, DsMovimiento.Relations("FK_MOV_MOVIMIENTODETALLE_MOV_DESCRIPCIONDET"))
                            drDescDet.NUMEROPRODUCTO = ConsecAsigna
                            drDescDet.TIPOSUBPROD = cDetLis.iProducto.TipoSubProd
                            drDescDet.NUMEROREGISTRO = txtNumeroRegistro.Text
                            drDescDet.COSTO = drMovDetalle.VALORBASE * (1 - drMovDetalle.DESCUENTO1) * (1 - drMovDetalle.DESCUENTO2)
                            DsMovimiento.MOV_DESCRIPCIONDET.Rows.Add(drDescDet)
                            drDescDet = Nothing
                            drMovDetalle = Nothing
                            txtIngresados.Text = MOV_DESCRIPCIONDETDataGridView.RowCount
                        Else
                            MessageBox.Show("Imei ya fue asignado a un Prepack", "Imei", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                            e.Cancel = True
                        End If
                    Else
                        MessageBox.Show("El Numero de registro ya esta en Inventario", "Inventario", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                        e.Cancel = True
                    End If
                Else
                    MessageBox.Show("El Numero de registro ya esta ingresado", "NumeroRegistro", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                    e.Cancel = True
                End If
                txtNumeroRegistro.Text = ""
                txtNumeroRegistro.Focus()
            End If
            ValidarRegsitroDescDetalle(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index, MOV_MOVIMIENTODETALLEDataGridView.Rows(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index).Cells("CANTIDAD").Value)
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Function eliminarRegistrosDescDetalle(ByVal idProd As String, ByVal tipoSubProd As Integer, ByVal numReg As String) As Boolean
        Try
            Dim dt As New dsInvenConsultas.INV_GETPREPACKDataTable
            Dim cGetDatos As GetDatosPrepack = New GetDatosPrepack(idProd, tipoSubProd, numReg)
            dt = cGetDatos.Prepack
            'Dim cant As Integer = 0
            'Dim numLinea As Integer
            If dt Is Nothing Then
                Return True
            Else
                For Each dr As dsInvenConsultas.INV_GETPREPACKRow In dt
                    For Each drDesc As dsMovimiento.MOV_DESCRIPCIONDETRow In DsMovimiento.MOV_DESCRIPCIONDET.Rows
                        If drDesc.RowState <> DataRowState.Deleted Then
                            If dr.TIPOSUBPRODH > 0 Then
                                If drDesc.NUMEROREGISTRO = dr.NUMEROREGISTROH And drDesc.TIPOSUBPROD = 2 Then
                                    'cant += 1
                                    'numLinea = drDesc.NUMEROLINEA
                                    drDesc.Delete()
                                    GoTo fin
                                End If
                            End If
                            If drDesc.NUMEROREGISTRO = dr.NUMEROREGISTROP And drDesc.TIPOSUBPROD = 1 Then
                                drDesc.Delete()
                                'Exit For
                            End If
fin:
                        End If
                    Next
                Next
                Return False
            End If
            'For Each drDeta As dsMovimiento.MOV_MOVIMIENTODETALLERow In DsMovimiento.MOV_MOVIMIENTODETALLE.Rows
            '    If drDeta.NUMEROLINEA = numLinea Then
            '        drDeta.CANTIDAD -= cant
            '        If drDeta.CANTIDAD = 0 Then
            '            drDeta.Delete()
            '        End If
            '        Exit For
            '    End If
            'Next
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Henry")
            MessageBox.Show(ex.Message)
        End Try
    End Function


    'Private Sub btnEliminaDescDet_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminaDescDet.Click
    '    Try
    '        Dim Mensaje As String = ""
    '        Dim nReg As Integer = -1
    '        If iTipoDoc.DocEs = eTipoMovimi.Entrada Then
    '            Mensaje = "Esta seguro que desea eliminar el ultimo registro"
    '            nReg = MOV_DESCRIPCIONDETDataGridView.RowCount - 1
    '        Else
    '            Mensaje = "Esta seguro que desea eliminar el registro seleccionado"
    '            nReg = MOV_DESCRIPCIONDETDataGridView.CurrentRow.Index
    '        End If
    '        If MessageBox.Show(Mensaje, "Elimina Registro", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
    '            Dim cGetDatos As GetDatosPrepack = New GetDatosPrepack(MOV_DESCRIPCIONDETDataGridView.Rows(nReg).Cells("IDPRODUCTO1").Value, MOV_DESCRIPCIONDETDataGridView.Rows(nReg).Cells("TIPOSUBPROD1").Value, MOV_DESCRIPCIONDETDataGridView.Rows(nReg).Cells("NUMEROREGISTRO").Value)
    '            If CType(txtContenido.Text, Integer) >= 1 And cGetDatos.EsPrepack Then
    '                eliminarRegistrosDescDetalle(MOV_DESCRIPCIONDETDataGridView.Rows(nReg).Cells("IDPRODUCTO1").Value, MOV_DESCRIPCIONDETDataGridView.Rows(nReg).Cells("TIPOSUBPROD").Value, MOV_DESCRIPCIONDETDataGridView.Rows(nReg).Cells("NUMEROREGISTRO").Value)
    '            Else
    '                MOV_DESCRIPCIONDETBindingSource.RemoveAt(nReg)
    '            End If
    '            SalvaCambios(False)
    '            InicializaConsec()
    '            ValidarRegsitroDescDetalle(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index, MOV_MOVIMIENTODETALLEDataGridView.Rows(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index).Cells("CANTIDAD").Value)
    '        End If
    '    Catch ex As Exception
    '        lbGlobalcom.cError.SalvaError(ex, "Samuel")
    '        MessageBox.Show(ex.Message)
    '    End Try

    'End Sub

    Private Sub btnEliminaDescDet_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminaDescDet.Click
        Try
            Dim nReg As Integer = MOV_DESCRIPCIONDETDataGridView.RowCount - 1
            If MessageBox.Show("Esta seguro que desea eliminar el ultimo registro", "Elimina Registro", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                If daPrepack.GetImeiAndIccidValido(MOV_MOVIMIENTODETALLEDataGridView.Rows(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index).Cells("IDPRODUCTO").Value, MOV_DESCRIPCIONDETDataGridView.Rows(MOV_DESCRIPCIONDETDataGridView.RowCount - 1).Cells("NUMEROREGISTRO").Value) = 0 Then
                    MOV_DESCRIPCIONDETBindingSource.RemoveAt(MOV_DESCRIPCIONDETDataGridView.RowCount - 1)
                    SalvaCambios(False)
                    InicializaConsec()
                    ValidarRegsitroDescDetalle(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index, MOV_MOVIMIENTODETALLEDataGridView.Rows(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index).Cells("CANTIDAD").Value)
                Else
                    If MessageBox.Show("Imei ya fue asignado a un Prepack desea eliminarlo de todas maneras", "Imei", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                        Dim cGetDatos As GetDatosPrepack = New GetDatosPrepack(MOV_DESCRIPCIONDETDataGridView.Rows(nReg).Cells("IDPRODUCTO1").Value, MOV_DESCRIPCIONDETDataGridView.Rows(nReg).Cells("TIPOSUBPROD").Value, MOV_DESCRIPCIONDETDataGridView.Rows(nReg).Cells("NUMEROREGISTRO").Value)
                        Dim iEliminaPPac As New cEliminaPrepaks(MOV_DESCRIPCIONDETDataGridView.Rows(nReg).Cells("TIPOSUBPROD").Value, MOV_DESCRIPCIONDETDataGridView.Rows(nReg).Cells("NUMEROREGISTRO").Value, cGetDatos.PPackEsPadre)
                        iEliminaPPac = Nothing
                        MOV_DESCRIPCIONDETBindingSource.RemoveAt(nReg)
                        SalvaCambios(False)
                        InicializaConsec()
                        ValidarRegsitroDescDetalle(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index, MOV_MOVIMIENTODETALLEDataGridView.Rows(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index).Cells("CANTIDAD").Value)
                    End If
                End If
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try

    End Sub


    Private Sub tpDetalle_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles tpDetalle.Enter
        Try
            If cDetLis IsNot Nothing Then
                If cDetLis.iProducto.ICCIDEnCompras = "S" Then
                    gbAdminPrepack.Enabled = True
                    gbDatosPrepack.Enabled = True
                Else
                    gbAdminPrepack.Enabled = False
                    gbDatosPrepack.Enabled = False
                End If
            End If
            '   llenarProductoCombo(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index)
            InicializaConsec()
            If MOV_MOVIMIENTODETALLEDataGridView.CurrentRow IsNot Nothing Then _
                ValidarRegsitroDescDetalle(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index, MOV_MOVIMIENTODETALLEDataGridView.Rows(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index).Cells("CANTIDAD").Value)
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Samuel")
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    'Private Sub cbProductos_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cbProductos.TextChanged
    '    Try
    '        If cbProductos.SelectedValue IsNot Nothing Then
    '            MOV_MOVIMIENTODETALLEDataGridView.Rows.IndexOf(MOV_MOVIMIENTODETALLEDataGridView.Rows(cbProductos.SelectedValue))
    '            'MOV_MOVIMIENTODETALLEDataGridView.Rows(cbProductos.SelectedValue - 1).Selected = True
    '            If cDetLis.iProducto.ICCIDEnCompras = "S" Then
    '                gbAdminPrepack.Enabled = True
    '                gbDatosPrepack.Enabled = True
    '            Else
    '                gbAdminPrepack.Enabled = False
    '                gbDatosPrepack.Enabled = False
    '            End If
    '            'llenarProductoCombo(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index)
    '            InicializaConsec()
    '            ValidarRegsitroDescDetalle(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index, MOV_MOVIMIENTODETALLEDataGridView.Rows(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index).Cells("CANTIDAD").Value)
    '        End If
    '    Catch ex As Exception
    '        lbGlobalcom.cError.SalvaError(ex, "Henry")
    '        MessageBox.Show(ex.Message)
    '    End Try
    'End Sub

    'Private Sub cbProductos_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles cbProductos.Validating
    '    Try
    '        MOV_MOVIMIENTODETALLEDataGridView.Rows(cbProductos.SelectedValue - 1).Selected = True
    '        If cDetLis.iProducto.ICCIDEnCompras = "S" Then
    '            gbAdminPrepack.Enabled = True
    '            gbDatosPrepack.Enabled = True
    '        Else
    '            gbAdminPrepack.Enabled = False
    '            gbDatosPrepack.Enabled = False
    '        End If
    '        llenarProductoCombo(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index)
    '        InicializaConsec()
    '        ValidarRegsitroDescDetalle(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index, MOV_MOVIMIENTODETALLEDataGridView.Rows(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index).Cells("CANTIDAD").Value)
    '    Catch ex As Exception
    '        lbGlobalcom.cError.SalvaError(ex, "Henry")
    '        MessageBox.Show(ex.Message)
    '    End Try
    'End Sub

    Private Sub MOV_MOVIMIENTODETALLEDataGridView_DataError(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles MOV_MOVIMIENTODETALLEDataGridView.DataError
        e.Cancel = True
        lbGlobalcom.cError.SalvaError(e.Exception, "Samuel")
        MessageBox.Show(e.Exception.Message)
    End Sub

    Private Sub FECHADOCUMENTODateTimePicker_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles FECHADOCUMENTODateTimePicker.Validating
        Try
            If FECHADOCUMENTODateTimePicker.Value < CustomPrincipal.Periodo.DESDEF Or FECHADOCUMENTODateTimePicker.Value > CustomPrincipal.Periodo.HASTAF Then
                MessageBox.Show("La fecha del documento debe de estar dentro del periodo abierto", "Error Fecha Documento", MessageBoxButtons.OK, MessageBoxIcon.Error)
                e.Cancel = True
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Henry")
            MessageBox.Show(ex.Message)
        End Try

    End Sub


    Private Sub btnCerrarDoc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCerrarDoc.Click
        Dim cmov As New cMovimiento(DsMovimiento)
        Try
            If cmov.cerrarDocumento() Then
                MessageBox.Show("Documento cerrado con exito", "Cerrado", MessageBoxButtons.OK, MessageBoxIcon.Information)
                If CustomPrincipal.IsInRole("ADMINGC") = False And cmov.buscarCerrado(IDDOCUMENTOTextBox.Text, NUMEROTextBox.Text) = "S" Then
                    lbGlobalcom.cGeneral.bloquearDocumento(Me.Controls, False)
                End If
            Else
                MessageBox.Show("No se puede cerrar el documento, No esta completo", "NoCerrado", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If

        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Henry")
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub MOV_MOVIMIENTODETALLEDataGridView_CellMouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles MOV_MOVIMIENTODETALLEDataGridView.CellMouseDoubleClick
        Try
            Select Case e.ColumnIndex
                Case 3
                    If IDDOCUMENTOTextBox.Text.Length > 0 And NUMEROTextBox.Text.Length > 0 Then
                        If MOV_MOVIMIENTODETALLEDataGridView.CurrentCellAddress.X = 3 Then
                            MOV_MOVIMIENTODETALLEDataGridView.Rows(e.RowIndex).Cells("LINEA").Value = cGeneral.GetNumeroLinea(MOV_MOVIMIENTODETALLEDataGridView, e.RowIndex)
                            Dim fLProd As New fListaProductos
                            fLProd.ListaPrecios = IDLISTATextBox.Text
                            If fLProd.ShowDialog = Windows.Forms.DialogResult.OK Then
                                MOV_MOVIMIENTODETALLEDataGridView.Rows(MOV_MOVIMIENTODETALLEDataGridView.CurrentRow.Index).Cells(3).Value = fLProd.idArticulo
                                cDetLis = cListaP.DetalleLista(fLProd.idArticulo)
                                ActualizaDatosProd(MOV_MOVIMIENTODETALLEDataGridView.CurrentCellAddress.Y)
                                stMovimi.Text = "PRODUCTO: " & cDetLis.iProducto.Descripcion & " UNIDAD: " & cDetLis.iProducto.Unidad & " CONTENIDO: " & cDetLis.iProducto.Contenido
                            End If
                        End If
                    End If
            End Select
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Henry")
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub btnEliminaMovDet_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminaMovDet.Click
        Try
            If MOV_MOVIMIENTODETALLEDataGridView.CurrentRow IsNot Nothing Then
                MOV_MOVIMIENTODETALLEBindingSource.RemoveCurrent()
                lEliminaDoc = True
                SalvaCambios(False)
            End If
        Catch ex As Exception
            lbGlobalcom.cError.SalvaError(ex, "Henry")
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub NOFACCOMCELTextBox_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles NOFACCOMCELTextBox.Validating
        Try
            If DsMovimiento.MOV_MOVIMIENTO.Rows.Count = 0 Then
                If daMovimi.CuentaNFacComcel(NOFACCOMCELTextBox.Text) > 0 Then
                    e.Cancel = True
                    MessageBox.Show("Factura de comcel No " & NOFACCOMCELTextBox.Text & " ya existe, favor verificar", "Factura Comcel duplicada", MessageBoxButtons.OK, MessageBoxIcon.Stop)
                End If
            Else
                Dim drMov As dsMovimiento.MOV_MOVIMIENTORow = DsMovimiento.MOV_MOVIMIENTO.Rows(0)
                If drMov.RowState = DataRowState.Modified Then
                    If drMov("NOFACCOMCEL", DataRowVersion.Original) <> drMov("NOFACCOMCEL", DataRowVersion.Current) Then
                        If daMovimi.CuentaNFacComcel(drMov("NOFACCOMCEL", DataRowVersion.Current)) > 0 Then
                            e.Cancel = True
                            MessageBox.Show("Factura de comcel No " & NOFACCOMCELTextBox.Text & " ya existe, favor verificar", "Factura Comcel duplicada", MessageBoxButtons.OK, MessageBoxIcon.Stop)
                        End If
                    End If
                End If
            End If

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

End Class